package br.com.unirio.autocar.modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * Acessorio negociado pela AutoCar.
 * 
 * @author Carlos
 * 
 */
@Entity
@Table(name = "ACESSORIO")
public class Acessorio implements Serializable
{

    /**
     * 
     */
    private static final long serialVersionUID = -6709031487614385326L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long idAcessorio;

    @OneToOne
    @JoinColumn(name = "IDPRODUTO", unique = true)
    Produto produto;

    @ManyToOne
    @JoinColumn(name = "IDFABRICANTE")
    Fabricante fabricante;

    @Column(name = "QUANTIDADE")
    private int quantidade;

    @ManyToMany
    @JoinTable(name = "ACESSORIO_FORNECEDOR", joinColumns = { @JoinColumn(name = "IDACESSORIO_FORN") }, inverseJoinColumns = { @JoinColumn(name = "IDFORNECEDOR") })
    Collection<Fornecedor> fornecedores;

    public Acessorio()
    {
	this.fornecedores = new ArrayList<Fornecedor>();
    }

    public Acessorio(Produto produto, Fabricante fabricante, int quantidade, Collection<Fornecedor> fornecedores)
    {
	this();
	this.produto = produto;
	this.fabricante = fabricante;
	this.quantidade = quantidade;
	this.fornecedores = fornecedores;
    }

    public Produto getProduto()
    {
	return produto;
    }

    public void setProduto(Produto produto)
    {
	this.produto = produto;
    }

    public Fabricante getFabricante()
    {
	return fabricante;
    }

    public void setFabricante(Fabricante fabricante)
    {
	this.fabricante = fabricante;
    }

    public int getQuantidade()
    {
	return quantidade;
    }

    public void setQuantidade(int quantidade)
    {
	this.quantidade = quantidade;
    }

    public Collection<Fornecedor> getFornecedores()
    {
	return fornecedores;
    }

    public void setFornecedores(Collection<Fornecedor> fornecedores)
    {
	this.fornecedores = fornecedores;
    }

    public void adicionarFornecedor(Fornecedor fornecedor)
    {
	if (fornecedor != null)
	{
	    this.fornecedores.add(fornecedor);
	}
    }

    public Long getIdAcessorio()
    {
	return idAcessorio;
    }

    @Override
    public String toString()
    {
	return this.getProduto().getDescricao();
    }
}
